package wetogether.community.vo;

import wetogether.community.util.CommonConstants;

/**
 * date : 2010-11-01
 * author : Jeon so-eui
 * comment : 댓글 VO
 */
public class PagingBean {
	/**
	 * 총 게시물 수
	 */
	private int totalContent;
	/**
	 * 현재 페이지
	 */
	private int nowPage;
	/**
	 * 한 페이지에서 보여줄 게시물의 수
	 */
	private int numberOfContentPerPage = CommonConstants.CONTENT_NUMBER_PER_PAGE;
	/**
	 * 페이지 그룹에 들어갈 페이지의 수
	 */
	private int numberOfPageGroup = CommonConstants.PAGEGROUP_NUMBER_PER_PAGE;
	
	public PagingBean() {
		super();
	}
	
	public PagingBean(int totalContent, int nowPage) {
		super();
		this.totalContent = totalContent;
		this.nowPage = nowPage;
	}

	public int getTotalContent() {
		return totalContent;
	}

	public void setTotalContent(int totalContent) {
		this.totalContent = totalContent;
	}

	public int getNowPage() {
		return nowPage;
	}

	public void setNowPage(int nowPage) {
		this.nowPage = nowPage;
	}

	public int getNumberOfContentPerPage() {
		return numberOfContentPerPage;
	}

	public void setNumberOfContentPerPage(int numberOfContentPerPage) {
		this.numberOfContentPerPage = numberOfContentPerPage;
	}

	public int getNumberOfPageGroup() {
		return numberOfPageGroup;
	}

	public void setNumberOfPageGroup(int numberOfPageGroup) {
		this.numberOfPageGroup = numberOfPageGroup;
	}

	@Override
	public String toString() {
		return "PagingBean [nowPage=" + nowPage + ", numberOfContentPerPage=" + numberOfContentPerPage 
				+ ", numberOfPageGroup=" + numberOfPageGroup + ", totalContent=" + totalContent + "]";
	}	
	
	/**
	 * 총 페이지 수 리턴 
	 * ex) 15 개의 게시물이 있다면 페이지 수 3 이 리턴
	 * ex) 16 개의 게시물이 있다면 페이지 수 4 가 리턴
	 * 전체 게시물 수 % 한 페이지에 보여질 게시물의 수 == 0 -> 나눈 값 리턴
	 *                                                            != 0 -> 나눈 값 + 1 리턴
	 * @return
	 */
	public int getTotalPage() {
		int totalPage = 0;		
		if(totalContent % numberOfContentPerPage == 0) {
			totalPage = totalContent / numberOfContentPerPage;
		} else {
			totalPage = (totalContent / numberOfContentPerPage) + 1;
		}		
		return totalPage;
	}
	
	/**
	 * 전체 페이지 그룹 수 리턴
	 * ex) 23 개의 게시물이 있다면 총 페이지 수는 5 -> 페이지 그룹 수는 2
	 * 총 페이지 수 %  페이지 그룹에 들어갈 페이지의 수 == 0 -> 나눈 값 리턴
	 *                                                             != 0 -> 나눈 값 + 1 리턴
	 * @return
	 */
	public int getTotalPageGroup() {
		int totalPageGroup = 0;
		int totalPage = getTotalPage();
		if(totalPage % numberOfPageGroup == 0) {
			totalPageGroup = totalPage / numberOfPageGroup;
		} else {
			totalPageGroup = (totalPage / numberOfPageGroup) + 1;
		}
		return totalPageGroup;
	}
	
	/**
	 * 현재 페이지가 속한 페이지 그룹 번호 리턴 
	 * ex) 현재 페이지가 4 라면 내가 속한 페이지 그룹의 번호는 1
	 * 현재 페이지 % 페이지 그룹에 들어갈 페이지의 수 == 0 -> 나눈 값 리턴
	 *                                                            != 0 -> 나눈 값 + 1 리턴
	 * @return
	 */
	public int getNowPageGroup() {
		int nowPageGroup = 0;
		if(nowPage % numberOfPageGroup == 0) {
			nowPageGroup = nowPage / numberOfPageGroup;
		} else {
			nowPageGroup = (nowPage / numberOfPageGroup) + 1;
		}
		return nowPageGroup;
	}
	
	/**
	 * 현재 페이지가 속한 페이지 그룹의 시작 페이지 번호를 리턴
	 * ex) 현재 페이지가 7 이라면 내가 속한 페이지 그룹의 번호는 2
	 *      (2 - 1) * 4 = 4 : 이전 그룹의 마지막 페이지 번호 -> + 1 --> 5
	 * ((현재 페이지가 속한 페이지 그룹 번호 - 1) * 페이지 그룹에 들어갈 페이지의 수) + 1
	 * 이전 그룹의 마지막 페이지를 구한 다음 + 1 하면 시작 페이지가 된다.
	 * @return
	 */
	public int getStartPageOfPageGroup() {
		int startPageOfPageGroup = 0;
		int nowPageGroup = getNowPageGroup();
		startPageOfPageGroup = ((nowPageGroup - 1) * numberOfPageGroup) + 1;
		return startPageOfPageGroup;
	}
	
	/**
	 * 현재 페이지가 속한 페이지 그룹의 마지막 페이지 번호 리턴
	 * 현재 페에지가 속한 페이지 그룹 번호 * 페이지 그룹에 들어갈 페이지의 수
	 * 단! 결과가 전체 페이지 수보다 클 경우 전체 페이지 수가 마지막 페이지로 되어야 함! 
	 * @return
	 */
	public int getEndPageOfPageGroup() {
		int endPageOfPageGroup = 0;
		int nowPageGroup = getNowPageGroup();
		int totalPage = getTotalPage();
		endPageOfPageGroup = nowPageGroup * numberOfPageGroup;
		if(endPageOfPageGroup > totalPage) {
			endPageOfPageGroup = totalPage;
		}
		return endPageOfPageGroup;
	}
	
	/**
	 * 이전 페이지 그룹이 있는지 확인하여 있으면 true, 없으면 false 리턴
	 * 현재 페이지 그룹이 1 보다 크면 true
	 * @return
	 */
	public boolean isPreviousPageGroup() {
		boolean flag = false;
		int nowPageGroup = getNowPageGroup();
		if(nowPageGroup > 1) {
			flag = true;
		}
		return flag;
	}
	
	/**
	 * 다음 페이지 그룹이 있는지 확인
	 * 현재 페이지 그룹이 마지막 페이지 그룹보다 작으면 true
	 * @return
	 */
	public boolean isNextPageGroup() {
		boolean flag = false;
		int nowPageGroup = getNowPageGroup();
		int totalPageGroup = getTotalPageGroup();
		if(nowPageGroup < totalPageGroup) {
			flag = true;
		}
		return flag;
	}
}